import { createStore } from "vuex";
import user from "./modules/user";

//创建一个新的store实例
const store = createStore({
  state: {
    con: 1,
    userInfo: {
      name:'',
      token:'',

    },
  },
  mutations: {
    changeUserInfo(state, data) {
      state.userInfo = { ...state.userInfo, ...data };
    },
    //提交mutation进行状态修改--同步操作可以直接在mutatuions中直接进行
    // 传入state
    increment(state, num) {
      state.con += num;
    },
    // 包含type 和 回调函数 两部分--调用时store.commit({type:'increment',12})
    incre2(state, payload) {
      state.con += payload.num;
    },
  },

  //异步操作
  actions: {
    //context上下文对象，可以理解为store
    sum_actions(context, num) {
      return new Promise((resolve, reject) => {
        if (context.state.con < 30) {
          setTimeout(() => {
            context.commit("increment", num); //通过context去触发mutions中的方法
            resolve("小雨30，操作成功");
          }, 500);
        } else {
          reject(new Error("大于30"));
        }
      });
    },
  },

  //类似于组建的计算属性
  getters: {
    // getters固定两个参数
    getterone(state) {
      return state.con + 100;
    },
    //传参写法
    gettertwo: (state) => {
      return (num) => {
        return state.con + num;
      };
    },
  },

  modules: {
    user,
  },
});

export default store;
